package com.heima.wemedia.service.impl;

import com.alibaba.fastjson.JSON;
import com.heima.client.schedule.ITaskClient;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.dtos.TaskDto;
import com.heima.model.common.pojos.wemedia.WmNews;
import com.heima.wemedia.service.WmAutoScanService;
import com.heima.wemedia.service.WmTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class    WmTaskServiceImpl implements WmTaskService {

    @Autowired
    private ITaskClient taskClient;
    @Autowired
    private WmAutoScanService wmAutoScanService;
    /**
     * 添加审核文章任务
     * @param wmNews
     */
    @Async
    public void addTask(WmNews wmNews) {
        //远程调用schedule微服务，添加一个审核文章的任务
        TaskDto taskDto = new TaskDto();
        //1001：表示自媒体业务线
        taskDto.setTaskType(1001);   //任务类型：描述当前任务属于哪个业务线
        //1：表示审核
        taskDto.setPriority(1);    //任务优先级：描述当前任务属于哪个业务线下的具体某个业务点
        taskDto.setExecuteTime(wmNews.getPublishTime().getTime());  //任务执行时间
        taskDto.setParameters(String.valueOf(wmNews.getId()));      //任务携带的参数：任务一旦被消费，需要的核心业务数据
        taskClient.addTask(taskDto);        //调用延迟微服务，添加审核文章任务
    }

    /**
     * 拉取到期任务并消费
     */
    @Scheduled(cron = "0/1 * * * * ? ")
    public void pullTask() {
        //1.拉取Redis中的List中的到期数据，并消费处理
        ResponseResult response = taskClient.pullTask(1001,1);
        if (200 == response.getCode()){
            String taskDtoJSON = response.getData().toString();
            TaskDto taskDto = JSON.parseObject(taskDtoJSON, TaskDto.class);
            String newsIdStr = taskDto.getParameters();
            log.info("---------拉取到任务数据：{}，开启文章审核逻辑------------", newsIdStr);
            wmAutoScanService.autoScan(Integer.valueOf(newsIdStr));
        }
    }
}
